package opgave2;

public class Tabel<K extends Data, V extends Clonable> implements TabelInterface<K, V> {

	Lijst<Pair<K, V>> data = new Lijst<Pair<K,V>>();
	
	public Tabel() {
		data = new Lijst<Pair<K,V>>();
	}
	
	public void init() {
		data.init();
	}

	public void add(K key, V value) {
		if(contains(key)) {
			data.current.data.value = (V)value.clone();
		} else {
			// Met de insert methode wordt al een kopie toegevoegd dus we maken geen overbodige kopieen.
			data.insert(new Pair<K, V>(key, value));
		}
	}

	public V get(K key) {
		data.find(new Pair<K,V>(key, null));
		return data.retrieve().value;
	}

	public boolean contains(K key) {
		return data.find(new Pair<K,V>(key, null));
	}

	public void remove(K key) {
		if(contains(key)) {
			data.remove();
		}
	}
	
	public Tabel<K, V> clone() {
		Tabel<K, V> result = new Tabel<K, V>();
		
		result.data = data.clone();
		
		return result;
	}
}
